package objetos;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
//@Inheritance(strategy=InheritanceType.JOINED) // Cria uma tabela separada
public class Usuario implements Serializable {

	private static final long serialVersionUID = -2497283102432440185L;
	@Id @GeneratedValue
	private Long usuarioID;
	private String nomeCompleto;
	@Column(unique=true)
	private String matricula; // Login
	private String senha;
        private String email;
	private boolean isAdmin;
	private boolean isPendente;
        private Double pontosExtra;


        @OneToMany(mappedBy="usuario", fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Pergunta> perguntas;

        @OneToMany(mappedBy="usuario", fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Resposta> respostas;

        public Double getPontosExtra() {
            return pontosExtra;
        }

        public void setPontosExtra(Double pontosExtra) {
            this.pontosExtra = pontosExtra;
        }

        public double getPontosPerguntas() {
            Iterator it = perguntas.iterator();
            double total=0;
            while(it.hasNext()) {
                Pergunta p = (Pergunta) it.next();
                total+=p.getPontuacao();
            }

            return total;
        }

        public double getPontosRespostas() {
            Iterator it = perguntas.iterator();
            double total=0;
            while(it.hasNext()) {
                Resposta p = (Resposta) it.next();
                total+=p.getPontuacao();
            }

            return total;
        }

	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public boolean isAdmin() {
		return isAdmin;
	}
	public void setAdmin(boolean isAdmin) {
		this.isAdmin = isAdmin;
	}
	public boolean isPendente() {
		return isPendente;
	}
	public void setPendente(boolean isPendente) {
		this.isPendente = isPendente;
	}

        public Long getUsuarioID() {
		return usuarioID;
	}
	public void setUsuarioID(Long usuarioID) {
		this.usuarioID = usuarioID;
	}
	public String getNomeCompleto() {
		return nomeCompleto;
	}
	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}
	public String getMatricula() {
		return matricula;
	}
	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public void setPerguntas(List<Pergunta> perguntas) {
		this.perguntas = perguntas;
	}
	
	public List<Pergunta> getPerguntas() {
		return perguntas;
	}
	public void setRespostas(List<Resposta> respostas) {
		this.respostas = respostas;
	}
	public List<Resposta> getRespostas() {
		return respostas;
	}
	
	public void printInfo() {
		System.out.println("Nome completo: "+getNomeCompleto());
		System.out.println("Matricula: "+getMatricula());
		System.out.println("Senha: "+getSenha());
		//System.out.println("Pergunta: "+perguntas.get(0).getMensagem());
	}

}
